#ifndef UIMANAGER_H
#define UIMANAGER_H

#include <QList>

enum RolePermissionIndex
{
    SetParameter = 0,
    Performance = 1,
    SystemLog = 2,
    SetNetwork = 3,
    SetLanguage = 4,
    Print = 5,
    SetTime = 6,
    SysUpdate = 7,
    Experiment = 8,
    AllData = 9
};

class QWidget;
class AuthManager
{
public:
    static AuthManager *instance();

    void showControls(QWidget *form, int permission);
    int showContainer(QWidget *form);

    /**
     * @brief hasPermission 查询权限
     * @param permission 角色权限
     * @param index 角色权限序号
     * @return 有权限返回true
     */
    bool hasPermission(int permission, RolePermissionIndex index);

    /**
     * @brief addPermission 添加权限
     * @param permission 角色权限
     * @param index 角色权限序号
     * @return 新权限
     */
    int addPermission(int permission, RolePermissionIndex index);

    /**
     * @brief removePermission 移除权限
     * @param permission 角色权限
     * @param index 角色权限序号
     * @return 新权限
     */
    int removePermission(int permission, RolePermissionIndex index);

    /**
     * @brief basePermission 获取角色基础权限
     * @param roleName 角色名
     * @return 角色基础权限
     */
    int basePermission(const QString &roleName);

    /**
     * @brief isPresetAccount 是否预设账号
     * @param name 用户名或角色
     * @return 如果是预设账号返回true
     */
    bool isPresetAccount(const QString &name);

    /**
     * @brief isInnerAccount 是否厂家账号
     * @param name 用户名
     * @return 如果是厂家账号返回true
     */
    bool isManufacturer(const QString &name);

    /**
     * @brief isAdministrator 是否管理员
     * @param name 用户名
     * @return 如果是管理员返回true
     */
    bool isAdministrator(const QString &name);

    /**
     * @brief manufacturer 厂家账号
     * @return 厂家账号名
     */
    QString manufacturer();

private:
    AuthManager();
    Q_DISABLE_COPY(AuthManager)
};

#endif // UIMANAGER_H
